package com.pangdonghao.internationalizationdemo.core.response;

import com.pangdonghao.internationalizationdemo.core.i18n.Resources;
import org.springframework.util.StringUtils;

/**
 * 状态码，主要参考Http状态码，但并不完全对应
 * @author amigo
 *
 */
public enum StatusCode {

	/** 200请求成功 */
    OK(200),
    /** 400请求参数出错 */
    BAD_REQUEST(400),
    /** 401没有登录 */
    UNAUTHORIZED(401),
    /** 500服务器出错 */
    INTERNAL_SERVER_ERROR(500),
	/** 2000用户异常 */
    USER_EXCEPTION(2000),
/** ======================================================登录注册============================================= */
    /** 国家代码为空 */
    COUNTRY_CODE_IS_NULL(2101),
    //手机号为空
    PHONE_CODE_IS_NULL(2102),
    //验证码为空
    VERIFICATION_CODE_IS_NULL(2103),
    /** 2001注册失败 */
    LOGIN_FAILED(2001),
    /** 2000手机号已存在 */
    MOBILEPHONE_EXIST(2004),
    /** 不一致的设备 */
    DIFFERENCCE_DEVICE(2005),
    /** 手机不存在 */
    MOBILEPHONE_NOT_EXIST(2006),
    
    /** 该天有订单 */
    ALREADY_HAS_ORDER(2007),
   
    /** 最后一天设置时间不允许跨天 */
    LAST_DAY_NO_ALLOW_STRIDE_ACROSS_THE_DAY(2008),
    /** 每个月必须有超过20天工作日 */
    EVERY_MOUTH_MUST_HAS_OVER_TWENTY_DAY_WORK(2009),
    /** 不能设置重叠的休息时间 */
    CAN_NOT_SETUP_OVERLAPPING_REST_TIME(2010),
    /** 一天的工作时间不能小于2小时 */
    ONE_DAY_WORK_TIME_CAN_NOT_LOWER_TWO_HOURS(2011),
    /** 预设信息已经过期,请重新设置 */
    SET_UP_TIME_ALREADY_EXPIRED(2012),

    /** 1000验证码错误 */
    SMS_CODE_ERROR(1000),
    /** 1001发送验证码太频繁 */
    SMS_CODE_MULTI(1001),
    /** 1002验证码不能为空 */
    SMS_CODE_NOT_EMPTY(1002),
    /** 1102 验证码日限额 */
    DAILY_FREQUENCY_LIMITATION_OF_MOBILE_PHONE_NUMBER(1102),
    /** 1005 时间不合理*/
	TIME_IS_NOT_REASONABLE(1005),
	  /** 1005 时间不合理*/
	CARD_EXCEPTION(1006),
	
	//支付时卡类型（信用卡/借记卡）类型错误
	NO_SUCH_CARD_TYPE(1004),
	
	//当前用户不是这张卡的持卡人
	CARD_HOLDER_IS_NOT_CURRENT_USER(1007),
	
	/**
	 * 有未完成的订单，不能注销账户
	 */
	HAS_UNFINISH_ORDER(1022),
	
	/**
	 *账户中仍有余额，不能注销账户
	 */
	HAS_BALANCE(1023),
	
	//没有这张卡
	NO_SUCH_CARD(1008),
	
	//支付密码错误
	PAY_PASSWORD_ERROR(1009),
	
	//用户未设置支付密码
	PASSWORD_UNSETED(1019),
	
	//余额不足
	BALANCE_NOT_ENOUGH(1010),
	
    /** 1003验证码状态更新异常 */
    SMS_CODE_UPDATE_EXCEPTION(1003),
	
    /**
     * 文件上传失败
     */
    FILE_UPLOAD_FILURE(1011), 
    
    /**
     * 文件获得失败哦
     */
    NO_FILE_ACQUIRE(1012),
	
    /**
     * 不能关注自己
     */
    CAN_NOT_COLLECT_YOUR_SELF(1014),
    
    /**
     * 订单时间不合理
     */
	ORDER_TIME_CONFLICT(1013),
	
	/**
	 * 订单已经修改过
	 */
	ORDER_ALREADY_MODIFY(1015),
	
	/**
	 * 订单已经被处理
	 */
	ORDER_HAS_BEEN_PROCESSED(1016),
	
	/**
	 * 不能修改时长和金额
	 */
	CAN_NOT_MODIFY_TIMERANGE_AND_MONEY(1017),
	
	/**
	 * 对方已经关闭接单
	 */
	USER_ALREADY_CLOSE_ACCEPT_ORDER(1018),
	
	/**
	 * 该时间对方已被预约
	 */
	USER_TIME_ALREADY_HAS_ORDER(1029),

    /**
     * 未购买
     */
    PORTRAY_IS_NOT_PAY(1020),

    /**
     * 支付异常
     */
    PAY_ERROR(1021),


    /**
     * 自动续费余额不足
     */
    RENEW_BALANCE_NOT_ENOUGH(1026),

    /**
     * 身份证/驾照不满2张
     * */
    ID_CARD_NOT_ENOUGH(1027),

    /**
     * 资料没填全
     * */
    PERSONAL_DATA_NOT_ENOUGH(1028),

    /**
     * 卡号/账号不正确
     * */
    CARD_NO_OR_ACCOUNT_NOT_SUCCESS(1029),
    NICKNAME_NOT_ACCEPT(1030),

    /** ===============================================订单==========================================*/

    ORDER_NOT_FOUND(3000),//订单找不到
    ORDER_EXCEPTION(3001),//订单异常
    ORDER_WITHIN_30_MINUTES(3002),//不能下30分钟内的订单(废弃)
    ORDER_BEFORE_TODAY(3002),//不能下今天前的订单
    PRICE_NOT_SET(3003),//未设置预约金额
    GET_MODEL_USER_INFO_ERROR(3004),//获取模特信息失败
    GET_MY_USER_INFO_ERROR(3005),//获取自己的用户信息失败
    CARD_NOT_YOUR(3006)//不是本人的卡
    ;
	
	
	private final Integer value;

    StatusCode(Integer value) {
        this.value = value;
    }

    public Integer value() {
        return this.value;
    }
    public String msg() {
        return Resources.getMessage("STATUSCODE_" + this.value);
    }

    public Meta handler() {

        Meta meta = new Meta();
        if(this.value==200){
            meta.setSuccess(true);
        }else {
            meta.setSuccess(false);
        }
        meta.setCode(value);
        meta.setMsg(msg());
        return meta;
    }
    @Override
    public String toString() {
        return this.value.toString();
    }
}
